home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / shadebob / shadebob.asm < prev    next >
Encoding:
Assembly Source File  |  1994-03-12  |  7.9 KB  |  269 lines

  1.  
  2.  
  3. ;-----------------------------------------------------------------------------
  4. ; Shade bobs
  5. ;                             
  6. ; Coded by NutCracker of The Immortal Syndicate 1994 
  7. ;
  8. ; This file is hereby released into the Public Domain so use it...
  9. ; Of course if this is put into a demo or some other production give me credit
  10. ; or else.... :)
  11. ;
  12. ; Sorry not many comments, i didn't have time....
  13. ;
  14. ;-----------------------------------------------------------------------------
  15.  
  16.                 
  17.                 
  18.                 jumps
  19.                 .model  small,pascal
  20.                 .286
  21.  
  22.                 dosseg
  23.                 .stack 1024
  24.  
  25.                 global  BopShades:proc
  26.  
  27. ;======================== Demo Equates and Data ==============================
  28.  
  29. TIMEOUT         equ     9000                    
  30. MAXWIDTH        equ     320                     
  31. MAXHEIGHT       equ     200
  32. CENTERX         equ     160-25                  
  33. CENTERY         equ     100-25
  34. MAXBOPS         equ     250                     
  35. RADIUSX         equ     170                     
  36. RADIUSY         equ     180                     
  37.  
  38.                 .data
  39.  
  40.                 include shades.inc              
  41.                 include sincos.inc              
  42.  
  43. BopQueue        dw      MAXBOPS dup(?)          
  44. BopHead         dw      ?                       
  45. Angle           dw      ?                       
  46. Phase1          dw      ?                       
  47. Phase2          dw      ?                       
  48. PhInc1          dw      ?
  49. PhInc2          dw      ?
  50. Frames          dw      ?                       
  51.  
  52. ; Bob Routine
  53.  
  54.                 .code
  55.  
  56. ;*****************************************************************************
  57. ;ShowBop
  58. ;*****************************************************************************
  59.  
  60. ShowBop         proc near
  61.  
  62.                 mov     ax,0A000h
  63.                 mov     es,ax
  64.                 xor     si,si
  65.                 mov     cx,BOPPTS
  66. ShowLoop:       mov     al,[BopAddTab+si]
  67.                 shl     si,1
  68.                 mov     bx,[BopTab+si]
  69.                 shr     si,1
  70.                 add     es:[bx+di],al
  71.                 inc     si
  72.                 loop    ShowLoop
  73.                 ret
  74.  
  75. ShowBop         endp
  76.  
  77. ;*****************************************************************************
  78. ;HideBop
  79. ;*****************************************************************************
  80.  
  81. HideBop         proc near
  82.  
  83.                 mov     ax,0A000h
  84.                 mov     es,ax
  85.                 xor     si,si
  86.                 mov     cx,BOPPTS
  87. HideLoop:       mov     al,[BopAddTab+si]
  88.                 shl     si,1
  89.                 mov     bx,[BopTab+si]
  90.                 shr     si,1
  91.                 sub     es:[bx+di],al
  92.                 inc     si
  93.                 loop    HideLoop
  94.                 ret
  95.  
  96. HideBop         endp
  97.  
  98. ;*****************************************************************************
  99. ;Initbops
  100. ;*****************************************************************************
  101.  
  102. Initbops        proc near
  103.  
  104.                 mov     ax,ds
  105.                 mov     es,ax
  106.                 lea     di,[BopQueue]
  107.                 mov     cx,MAXbops
  108.                 mov     ax,0FFFFh               
  109.                 cld                             
  110.                 rep     stosw                   
  111.                 mov     [BopHead],4             
  112.                 ret
  113.  
  114. Initbops        endp
  115.  
  116. ;*****************************************************************************
  117. ;PutBop - Puts a new bopshade onto the Queue and updates the screen.
  118. ;*****************************************************************************
  119.  
  120. PutBop          proc near
  121.  
  122.                 mov     di,dx
  123.                 imul    di,MAXWIDTH
  124.                 add     di,cx
  125.                 mov     bx,[BopHead]
  126.                 xchg    [BopQueue+bx],di
  127.                 cmp     di,MAXWIDTH*MAXHEIGHT
  128.                 jae     PutNewBop
  129.                 call    HideBop
  130. PutNewBop:      mov     bx,[BopHead]
  131.                 mov     di,[BopQueue+bx]
  132.                 cmp     di,MAXWIDTH*MAXHEIGHT
  133.                 jae     SkipShow
  134.                 call    ShowBop
  135. SkipShow:       add     [BopHead],2
  136.                 cmp     [BopHead],2*MAXbops            
  137.                 jb      ByePutBop
  138.                 mov     [BopHead],0
  139. ByePutBop:      ret
  140.  
  141. PutBop          endp
  142.  
  143.  
  144. ;*****************************************************************************
  145. ;Start the shades
  146. ;*****************************************************************************
  147.  
  148. bopshades       proc
  149.  
  150.                 mov     ax,13h
  151.                 int     10h
  152.  
  153.                 mov     dx,3C8h
  154.                 xor     al,al  
  155.                 out     dx,al
  156.                 inc     dx
  157.                 mov     cx,256
  158.                 xor     ah,ah
  159. SetPal:         xor     al,al                                     
  160.                 out     dx,al
  161.                 mov     al,ah  
  162.                 out     dx,al  
  163.                 xor     al,al  
  164.                 out     dx,al
  165.                 cmp     ah,62  
  166.                 jae     SetBrk
  167.                 inc     ah
  168. SetBrk:         loop    SetPal
  169.  
  170.                 call    Initbops
  171.  
  172.                 mov     [Angle],0
  173.                 mov     [Phase1],2*1024
  174.                 mov     [Phase2],2*1024
  175.                 mov     [PhInc1],2
  176.                 mov     [PhInc2],3
  177.                 mov     [Frames],0
  178.  
  179. ShadesLoop:     mov     ax,[Angle]
  180.                 imul    [Phase1]
  181.                 mov     bl,ah
  182.                 mov     bh,dl
  183.                 shr     bx,2      
  184.                 xor     bh,bh
  185.                 mov     al,[CosTable+bx]
  186.                 mov     ah,RADIUSX
  187.                 imul    ah
  188.                 sar     ax,6                    
  189.                 add     ax,CENTERX
  190.                 mov     cx,ax
  191.  
  192.                 mov     ax,[Angle]              
  193.                 imul    [Phase2]
  194.                 mov     bl,ah
  195.                 mov     bh,dl
  196.                 shr     bx,2                   
  197.                 xor     bh,bh
  198.                 mov     al,[SinTable+bx]
  199.                 mov     ah,RADIUSY
  200.                 imul    ah
  201.                 sar     ax,6                   
  202.                 add     ax,CENTERY
  203.                 mov     dx,ax
  204.  
  205.                 call    PutBop                 
  206.  
  207.                 mov     ax,[Angle]             
  208.                 inc     ax
  209.                 and     ax,1023
  210.                 mov     [Angle],ax
  211.  
  212.                 mov     ax,[Phase1]            
  213.                 add     ax,[PhInc1]
  214.                 cwd
  215.                 mov     bx,1*2268              
  216.                 div     bx
  217.                 mov     [Phase1],dx
  218.  
  219.                 mov     ax,[Phase2]            
  220.                 add     ax,[PhInc2]
  221.                 cwd
  222.                 mov     bx,1*2268              
  223.                 div     bx
  224.                 mov     [Phase2],dx
  225.  
  226.                 inc     [Frames]               
  227.                 cmp     [Frames],TIMEOUT
  228.                 ja      ShadesBye
  229.  
  230.                 mov     ah,1                   
  231.                 int     16h
  232.                 je      ShadesLoop
  233.  
  234. ShadesBye:      
  235.                 mov     cx,MAXbops             
  236. HidesLoop:      push    cx
  237.                 mov     cx,0FFFFh
  238.                 mov     dx,cx
  239.                 call    PutBop
  240.                 pop     cx
  241.                 loop    HidesLoop
  242.  
  243.                 mov     ax,03h
  244.                 int     10h
  245.                 ret
  246.  
  247. bopshades       endp
  248.  
  249.  
  250.  
  251. ;*****************************************************************************
  252. ;Startup
  253. ;*****************************************************************************
  254.  
  255. Start           proc
  256.  
  257.                 mov     ax,@Data
  258.                 mov     ds,ax
  259.                 call    bopshades
  260.                 mov     ax,4C00h
  261.                 int     21h
  262.  
  263. Start           endp
  264.  
  265.                 end     Start
  266.  
  267.  
  268.  
  269.